001 /*********************************************************************************************** 002 * Tekijä: Jukka Salminen 003 * Opiskelijanumero: i79947 004 * Email: jukka.salminen@uwasa.fi 005 * Tekoaika: 23.9.2002 006 * Kurssi/vuosi: Ohjelmoinnin jatkokurssi/kevät 2002 007 * Työn tunnus: Harjoitustyö: Taulukkoeditori web-sivulle 008 *********************************************************************************************** 009 * DataHandler-luokka 010 *==================== 011 * Tämän luokan tehtävät ovat: 012 * 013 * 1. Muodostaa HTTP-yhteyden URL-osoitteeseen, josta XML-stream luetaan. 014 * 2. Muodostaa reader-objektin, joka lukee URL-osoitteesta 015 * 3. Muodostaa XMLData-objektin XML:n parsimista varten 016 * 4. Muodostaa QDParser-objektin ja antaa edellä muodostetut reader- ja 017 * XMLData-objektit parametreina. Ks. tarkemmin QDParserin dokumentaatio. 018 * 019 * Metodit 020 *-------- 021 * get Luo XML-datan lukemiseen ja parsimiseen tarvittavat objektit. 022 * Käynnistää lukemisen kutsumalla parserin parse-metodia. 023 * 024 * getReader Muodostaa URLConnection-objektin, hakee sen avulla input-streamin 025 * ja muodostaa reader-objektin joka lukee streamista. 026 * 027 * Jäsenmuuttujat 028 *--------------- 029 * 030 * m_url 031 * ----- 032 * String URL (tai tiedosto), josta data luetaan 033 * 034 * m_xmlData 035 * --------- 036 * XMLData XMLDatassa on määritelty takaisinkutsuttavat funktiot, 037 * joita kutsutaan parserista 038 * 039 * m_reader 040 * -------- 041 * InputStreamReader Hoitaa merkkien lukemisen URLConnection-streamista 042 * 043 * Paikalliset muuttujat 044 *---------------------- 045 * Dokumentoitu ensimmäisen esittelyn yhetydessä 046 */ 047 048 package jsxml; 049 050 import jsxml.qdxml.*; 051 052 import java.io.*; 053 import java.net.*; 054 import java.util.Vector; 055 056 public class DataHandler 057 { 058 private String m_url; 059 private XMLdata m_xmlData; 060 private InputStreamReader m_reader; 061 public DataHandler(String sURL) 062 { 063 // Testausta varten voidaan lukea XML tiedostosta 064 if (sURL.equals("") || sURL.equals(null)) 065 { 066 m_url = "XMLTable.xml"; 067 } 068 else 069 { 070 m_url = sURL; 071 } 072 m_xmlData = new XMLdata(); 073 } 074 075 public Vector get() 076 { 077 m_reader = getReader(); 078 if (m_reader != null) 079 { 080 // Luodaan QDParser-luokasta objekti parser 081 QDParser parser = new QDParser(); 082 try 083 { 084 // Annetaan parserille XML-datan käsittelijä ja URL-lukija 085 parser.parse(m_xmlData, m_reader); 086 m_reader.close(); 087 // Kun homma on valmis, haetaan taulukon datavektori 088 return m_xmlData.getDataVector(); 089 } 090 catch (Exception e4) 091 { 092 System.err.println("Virhe XML-streamin käsittelyssä: "+e4.getMessage()); 093 return null; 094 } 095 096 } 097 return null; 098 } 099 private InputStreamReader getReader() 100 { 101 try 102 { 103 // reader-objekti lukee joko tiedostosta tai http-osoitteesta 104 InputStreamReader reader; 105 if (m_url.startsWith("http:")) 106 { 107 URL URL = new URL(m_url); 108 URLConnection xmlSite = URL.openConnection(); 109 InputStream input = xmlSite.getInputStream(); 110 reader = new InputStreamReader(input); 111 } 112 else 113 { 114 FileInputStream fis = new FileInputStream(m_url); 115 reader = new InputStreamReader(fis); 116 } 117 return reader; 118 } 119 catch (MalformedURLException e1) 120 { 121 System.err.println("Virhe 1 "+e1.getMessage()); 122 return null; 123 } 124 catch (UnknownHostException e2) 125 { 126 System.err.println("Virhe 2 "+e2.getMessage()); 127 return null; 128 } 129 catch (Exception e3) 130 { 131 System.err.println("Virhe 3 "+e3.getMessage()); 132 return null; 133 } 134 } 135 }